package me.zhengjie.modules.website.domain;

import java.io.Serializable;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import lombok.Data;
import me.zhengjie.base.BaseEntity;

import javax.persistence.*;

/**
 * 预约详细信息表（ReservationDetailTable）实体类
 *
 * 该实体类用于记录访客预约的详细信息，包括预约类型、预约人姓名、联系电话、预约时间、评审状态、评分等信息。
 * 还包括预约单位名称、单位电话、带队领导及职务等信息，用于对预约单位的管理和进一步沟通。
 *
 * @author system
 * @since 2024-10-23 22:22:57
 */
@Entity
@Data
@Table(name = "reservation_detail_table")
@ApiModel(value = "ReservationDetailTable", description = "预约详细信息表，用于记录每条预约的详细信息")
public class ReservationDetailTable extends BaseEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 预约详情ID
     * <p>
     * 该字段为每条预约详细信息的唯一标识符，由数据库自动生成。
     * </p>
     */
    @Column(name = "detail_id")
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @ApiModelProperty(value = "预约详情ID", required = true, example = "1")
    private Long detailId;

    /**
     * 预约ID
     * <p>
     * 该字段关联到主预约记录的ID，用于表示该详细信息属于哪个预约。
     * </p>
     */
    @Column(name = "reservation_id")
    @ApiModelProperty(value = "关联预约ID", required = true, example = "1001")
    private Long reservationId;

    /**
     * 预约类型
     * <p>
     * 该字段表示预约的类型，例如“访客预约”、“活动预约”等。
     * </p>
     */
    @Column(name = "reservation_type")
    @ApiModelProperty(value = "预约类型", required = true, example = "访客预约")
    private String reservationType;

    /**
     * 预约人姓名
     * <p>
     * 该字段表示预约人的姓名。
     * </p>
     */
    @Column(name = "reserver_name")
    @ApiModelProperty(value = "预约人姓名", required = true, example = "张三")
    private String reserverName;

    /**
     * 联系电话
     * <p>
     * 该字段表示预约人或联系人的联系电话。
     * </p>
     */
    @Column(name = "contact_phone")
    @ApiModelProperty(value = "联系电话", required = true, example = "13800138000")
    private String contactPhone;

    /**
     * 预约时间
     * <p>
     * 该字段表示预约的时间，记录访客预约的具体日期和时间。
     * </p>
     */
    @Column(name = "reservation_time")
    @ApiModelProperty(value = "预约时间", required = true, example = "2024-10-24 09:00:00")
    private Date reservationTime;

    /**
     * 评审状态
     */
    @Column(name = "review_status")
    @ApiModelProperty(value = "预约状态", required = true, example = "待审、取消、通过、驳回、其它")
    private String reviewStatus;

    /**
     * 评分
     * <p>
     * 该字段表示对预约的评分，通常为1到5的整数，表示访客对预约的满意度评分。
     * </p>
     */
    @Column(name = "rating")
    @ApiModelProperty(value = "评分", required = true, example = "4")
    private Integer rating;

    /**
     * 是否批准
     * <p>
     * 该字段表示预约是否已被批准，值为布尔类型，true表示已批准，false表示未批准。
     * </p>
     */
    @Column(name = "is_approved")
    @ApiModelProperty(value = "是否批准", required = true, example = "true")
    private Boolean isApproved;

    /**
     * 回复内容
     * <p>
     * 该字段表示对于预约的回复内容，通常由管理员填写，用于说明审核结果或其他相关说明。
     * </p>
     */
    @Column(name = "response_content")
    @ApiModelProperty(value = "回复内容", required = true, example = "预约已通过，请准时到访。")
    private String responseContent;

    /**
     * 评审时间
     * <p>
     * 该字段表示管理员完成评审的时间。
     * </p>
     */
    @Column(name = "review_time")
    @ApiModelProperty(value = "评审时间", required = true, example = "2024-10-23 16:00:00")
    private Date reviewTime;

    /**
     * 预约单位名称
     * <p>
     * 该字段表示预约单位的名称，用于标识预约是来自哪个单位。
     * </p>
     */
    @Column(name = "reservation_unit_name")
    @ApiModelProperty(value = "预约单位名称", required = true, example = "四川师范大学")
    private String reservationUnitName;

    /**
     * 单位电话
     * <p>
     * 该字段表示预约单位的联系电话，用于与单位进行沟通。
     * </p>
     */
    @Column(name = "unit_phone")
    @ApiModelProperty(value = "单位电话", required = true, example = "02812345678")
    private String unitPhone;

    /**
     * 带队领导
     * <p>
     * 该字段表示带队领导的姓名
     * </p>
     */
    @Column(name = "leader")
    @ApiModelProperty(value = "带队领导", required = true, example = "李四")
    private String leader;

    /**
     * 带队领导职务
     * <p>
     * 该字段表示带队领导的姓职务，通常用于活动或访客接待时的沟通与安排。
     * </p>
     */
    @Column(name = "position")
    @ApiModelProperty(value = "带队领导职务", required = true, example = "副校长")
    private String position;

    /**
     * 参观人数
     * <p>
     * 参观人数
     * </p>
     */
    @Column(name = "people_num")
    @ApiModelProperty(value = "参观总人数", required = true, example = "1")
    private Integer peopleNum;

    /**
     * 国密密文
     * <p>
     * 国密密文
     * </p>
     */
    @Column(name = "sm3")
    @ApiModelProperty(value = "国密密文", required = true, example = "miwen")
    private String sm3;
}
